Allow overriding WM_CLASS from the command line
authorLars Uebernickel <lars.uebernickel@canonical.com>
Fri, 10 Apr 2015 15:18:50 +0000 (17:18 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 11 May 2015 02:40:37 +0000 (22:40 -0400)
Even when the program itself calls gdk_set_program_class(). There's
currently no way for this function to be called without breaking gdk's
--class command line option, because you cannot call it before
gtk_init().

https://bugzilla.gnome.org/show_bug.cgi?id=747634

gdk/gdk.c

index 068ecc4f4cf535d510d1ad3b171fa7e1fff6476b..d86ea858044eb333ab2cb20a02ff46fff221d888 100644 (file)
--- a/gdk/gdk.c
+++ b/gdk/gdk.c
@@ -130,6 +130,7 @@ static int gdk_initialized = 0;                     /* 1 if the library is initi
                                                      */
 
 static gchar  *gdk_progclass = NULL;
+static gboolean gdk_progclass_overridden;
 
 static GMutex gdk_threads_mutex;
 
@@ -208,6 +209,7 @@ static gboolean
 gdk_arg_class_cb (const char *key, const char *value, gpointer user_data, GError **error)
 {
   gdk_set_program_class (value);
+  gdk_progclass_overridden = TRUE;
 
   return TRUE;
 }
@@ -1025,10 +1027,16 @@ gdk_get_program_class (void)
  * Sets the program class. The X11 backend uses the program class to set
  * the class name part of the `WM_CLASS` property on
  * toplevel windows; see the ICCCM.
+ *
+ * The program class can still be overridden with the --class command
+ * line option.
  */
 void
 gdk_set_program_class (const char *program_class)
 {
+  if (gdk_progclass_overridden)
+    return;
+
   g_free (gdk_progclass);
 
   gdk_progclass = g_strdup (program_class);